#include    <stdio.h>
#include    <stdlib.h>
#include    <utmp.h>
#include    <fcntl.h>
#include    <unistd.h>

#define SHOWHOST    

int show_info( struct utmp *utbufp )
{
    printf("%-8.8s", utbufp->ut_name);  
    printf(" ");                
    printf("%-8.8s", utbufp->ut_line);  
    printf(" ");                
    printf("%10ld", utbufp->ut_time);   
    printf(" ");                
#ifdef  SHOWHOST    //？这个是为了测试代码时用的吗？
    printf("(%s)", utbufp->ut_host);    
#endif
    printf("\n");               

    return 0;
}
int main()
{
    struct utmp  current_record;    
    int     utmpfd;     
    int     reclen = sizeof(current_record);

/*打开UTMP_FILE读取信息，如果打开失败则输出失败信息。*/
    if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ){
        perror( UTMP_FILE );    
        exit(1);
    }
    /*读取信息到存储器中，reclen就是是读的字节数，然后再调用函数打印出来。*/
    while ( read(utmpfd, &current_record, reclen) == reclen )
        show_info(&current_record);
    close(utmpfd);
    return 0;           
}
